Log the tdb_error when a read fails with EIO. This is happening after a long
authoremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Sat, 4 Mar 2006 18:12:37 +0000 (19:12 +0100)
committeremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Sat, 4 Mar 2006 18:12:37 +0000 (19:12 +0100)
time under load -- hopefully this message will suggest why.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/xenstore/xenstored_core.c

index 24fbf57805f24f575ea99700e47cf3b2db789375..b23aa40fa5382f003c4b1ae634297d6f5232ed3a 100644 (file)
@@ -406,16 +406,19 @@ static struct node *read_node(struct connection *conn, const char *name)
        TDB_DATA key, data;
        uint32_t *p;
        struct node *node;
+       TDB_CONTEXT * context = tdb_context(conn);
 
        key.dptr = (void *)name;
        key.dsize = strlen(name);
-       data = tdb_fetch(tdb_context(conn), key);
+       data = tdb_fetch(context, key);
 
        if (data.dptr == NULL) {
-               if (tdb_error(tdb_context(conn)) == TDB_ERR_NOEXIST)
+               if (tdb_error(context) == TDB_ERR_NOEXIST)
                        errno = ENOENT;
-               else
+               else {
+                       log("TDB error on read: %s", tdb_errorstr(context));
                        errno = EIO;
+               }
                return NULL;
        }